package com.hspedu.codeblock;

/**
 * @Author Stringzhua
 * @Date 2024/3/5 17:01
 * description:
 * 4.创建一个对象时,在一个类 调用顺序是:(重点 难点)
 * ①调用静态代码块和静态属性初始化
 * (注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)[举例说明]
 * <p>
 * ②调用普通代码块和普通属性的初始化
 * (注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通变量初始化,则按他们定义的顺序调用)
 * <p>
 * ③调用构造方法
 */
public class CodeBlockDetail02 {
    public static void main(String[] args) {
        A a = new A();
        //(1)A 静态代码块01... (2)getN1()被调用....(3)A 普通代码块01...(4)getN1被调用...(5)A() 无参构造器被调用...
    }
}

class A {
    {//普通代码块
        System.out.println("A 普通代码块01...");
    }

    private int n2 = getN2();//普通属性初始化

    static {//静态代码块
        System.out.println("A 静态代码块01...");
    }
//    static {//静态代码块
//        System.out.println("A 静态代码块02...");
//    }

    //静态属性的初始化
    private static int n1 = getN1();


    public static int getN1() {
        System.out.println("getN1()被调用....");
        return 100;
    }

    public int getN2() {//普通方法/非静态方法
        System.out.println("getN2()被调用....");
        return 200;
    }

    //无参构造器
    public A() {
        System.out.println("A() 无参构造器被调用...");
    }
}